const puppeteer = require('puppeteer');
const request = require('request');

// 企业微信机器人的 Webhook URL
const webhookUrl = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx';

// 发送消息到企业微信的函数
function requestfun(username, message) {
  const resData = {
    msgtype: 'text',
    text: {
      content: `${username}：${message}`,
    }
  };

  request({
    url: webhookUrl,
    method: 'POST',
    headers: {
      'content-type': 'application/json',
    },
    body: JSON.stringify(resData)
  }, function (error, response, body) {
    if (error) {
      console.error('发送消息失败:', error);
    } else {
      console.log('消息已发送到企业微信:', `${username}：${message}`);
    }
  });
}

// 判断弹幕内容是否包含正常文本
function containsNormalText(text) {
  // 正则表达式匹配数字、中英文
  const normalTextRegex = /[\u4e00-\u9fa5a-zA-Z0-9]/; // 中文字符、英文字母、数字
  return normalTextRegex.test(text); // 如果包含正常文本，返回 true
}

(async () => {
  // 启动浏览器
  const browser = await puppeteer.launch({
    headless: false, // 设置为 false 可以看到浏览器操作
    // executablePath: 'C:/Program Files/Google/Chrome/Application/chrome.exe',
    args: ['--no-sandbox', '--disable-setuid-sandbox']
  });

  // 打开新页面
  const page = await browser.newPage();

  // 设置页面视口大小
  await page.setViewport({ width: 1280, height: 800 });

  // 跳转到直播间页面
  const liveUrl = 'https://live.douyin.com/直播间id'; // 替换为实际的直播间 URL
  await page.goto(liveUrl, { waitUntil: 'networkidle2' });

  // 等待弹幕容器加载
  await page.waitForSelector('.webcast-chatroom___items');

  // 监听弹幕容器的变化
  await page.evaluate(() => {
    const targetNode = document.getElementsByClassName('webcast-chatroom___items')[0].children[0];
    const options = { attributes: false, childList: true, subtree: true, attributeOldValue: false };

    const callback = (mutationsList) => {
      if (mutationsList[mutationsList.length - 1].addedNodes.length > 0) {
        const newMessage = mutationsList[mutationsList.length - 1].addedNodes[0].innerText;
        console.log('原始弹幕内容:', newMessage); // 输出原始弹幕内容
        // 将弹幕内容发送到 Node.js 环境
        window.sendToNode(newMessage);
      }
    };

    const mutationObserver = new MutationObserver(callback);
    mutationObserver.observe(targetNode, options);
  });

  // 将弹幕内容传递回 Node.js 环境
  await page.exposeFunction('sendToNode', (message) => {
    // 提取用户名和弹幕内容
    const [username, content] = message.split('：'); // 注意是中文冒号
    if (username && content) {
      // 判断弹幕内容是否包含正常文本
      if (containsNormalText(content)) {
        requestfun(username, content); // 调用发送消息的函数
      } else {
        console.log('忽略纯表情弹幕:', `${username}：${content}`);
      }
    } else {
      console.log('无效弹幕格式:', message);
    }
  });

  // 保持页面打开，持续监听弹幕
  console.log('正在监听弹幕...');
})();